﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Innova.Microfinanzas.BusinessEntities;

namespace MyCommerce.Business.Stores
{
    public class StoreManager
    {
        private MyCommerceEntities vContext;

        public StoreManager()
        {
            if (vContext == null)
            {
                vContext = new MyCommerceEntities();
                vContext.ContextOptions.LazyLoadingEnabled = false;
            }
        }

        public StoreManager(bool lazyLoad)
        {
            if (vContext == null)
            {
                vContext = new MyCommerceEntities();
                vContext.ContextOptions.LazyLoadingEnabled = lazyLoad;
            }
        }

        public List<Store> GetAllStores()
        {
            List<Store> colStore = new List<Store>();

            var result = from st in vContext.Store
                         select st;
            if (result != null)
                colStore = new List<Store>(result.AsEnumerable<Store>());

            return colStore;
        }

        public List<Store> GetStoresActives()
        {
            List<Store> colStore = new List<Store>();

            var result = from st in vContext.Store
                         where st.IsActive == true
                         select st;
            if (result != null)
                colStore = new List<Store>(result.AsEnumerable<Store>());

            return colStore;
        }
        
        public Store GetStoreByID(long IdStore)
        {
            Store objStore = new Store();
            var result = (from st in vContext.Store
                         where st.IdStore == IdStore
                         select st).First();
            objStore = (Store)result;
            return objStore;
                
        }

        public void SaveStore(Store objStore)
        {
            var validateResult = (from cl in vContext.Store
                                  where (cl.Name.CompareTo(objStore.Name) == 0)
                                  select cl).Count();
            if (validateResult > 0)
            {
                throw new Exception("Ya existe un almacen con este nombre.");
            }

            if (objStore.IsCentralStore)
            {
                var validateCentral = (from cl in vContext.Store
                                       where (cl.IsCentralStore == true)
                                       select cl).Count();
                if (validateCentral > 0)
                {
                    throw new Exception("Ya existe un almacen central.");
                }
            }            

            vContext.AddToStore(objStore);
            vContext.SaveChanges();
        }

        public void UpdateStore(Store objStore)
        {
            var validateResult = (from cl in vContext.Store
                                  where (cl.Name.CompareTo(objStore.Name) == 0 && cl.IdStore != objStore.IdStore)
                                  select cl).Count();
            if (validateResult > 0)
            {
                throw new Exception("Ya existe un almacen con este nombre.");
            }

            var validateCentral = (from cl in vContext.Store
                                  where (cl.IsCentralStore == true && cl.IdStore != objStore.IdStore)
                                  select cl).Count();
            if (validateCentral > 0)
            {
                throw new Exception("Ya existe un almacen central.");
            }

            var vResult = (from st in vContext.Store
                           where st.IdStore == objStore.IdStore
                           select st).First();

            vResult.Code = objStore.Code;
            vResult.Name = objStore.Name;
            vResult.Address = objStore.Address;
            vResult.IsCentralStore = objStore.IsCentralStore;
            vResult.Phone = objStore.Phone;
            vResult.IdEmployee = objStore.IdEmployee;
            vResult.IsActive = objStore.IsActive;

            vContext.SaveChanges();
        }

        public void DeleteStore(long IdStore)
        {
            var vResult = (from st in vContext.Store
                           where st.IdStore == IdStore
                           select st).First();
            vContext.DeleteObject(vResult);
            vContext.SaveChanges();
        }

    }
}
